package com.ruoyi.ldzlsc.service;

import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.system.api.domain.BasicProduct;
import java.util.Map;
import java.util.List;

import java.util.List;
import java.util.Map;

/**
 * 产品库存Service接口
 *
 * @author ldzl
 * @date 2025-05-28
 */
public interface ScProductInventoryService {
    
    /**
     * 查询所有产品列表（使用BasicProductMapperlist方法）
     *
     * @param basicProduct 产品查询条件，可以为空
     * @return 产品集合
     */
    TableDataInfo listAllProducts(BasicProduct basicProduct);
    
    /**
     * 查询产品库存状态
     *
     * @param productIds 产品ID列表
     * @return 产品库存状态列表
     */
    List<Map<String, Object>> getProductStockStatus(List<Long> productIds);
    
    /**
     * 检查产品是否可以直接出库
     *
     * @param productIds 产品ID列表
     * @return 检查结果，true表示可以出库，false表示不能出库
     */
    boolean canProductOutbound(List<Long> productIds);
    
    /**
     * 检查产品是否需要生产
     *
     * @param productIds 产品ID列表
     * @return 检查结果，true表示需要生产，false表示不需要生产
     */
    boolean needProductProduction(List<Long> productIds);


    //自动生成编号
    AjaxResult automaticallyNumbers(Long enCode);

    /**
     * 根据产品ID查询库存数量
     *
     * @param productId 产品ID
     * @return 库存数量，如果查询失败返回0
     */
    int getProductStockQuantity(Long productId);

    /**
     * 批量查询产品库存数量
     *
     * @param productIds 产品ID列表
     * @return 产品ID和库存数量的映射
     */
    Map<Long, Integer> getProductStockQuantities(List<Long> productIds);
} 